package com.universalInterface.common.utils;

import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;

/**
 * @author Lx
 * @date 2023/12/20 17:16
 * @description 结合hutool将明文密码进行盐值加密
 */
public class SaltMD5Util {

	/**
	 * 加密
	 * @param password
	 * @return 盐值加密密码
	 */
	public static String encrypt(String password) {
		// 随机盐值
		String salt = IdUtil.simpleUUID();
		// 密码（md5(随机盐值+密码)）
		String saltPassword = SecureUtil.md5(salt + password);
		return salt + "." + saltPassword;
	}


	/**
	 * 验证
	 * @param password     要验证的密码（未加密）
	 * @param securePassword 数据库中的加了盐值的密码
	 * @return
	 */
	public static boolean verify(String password, String securePassword) {
		if (StrUtil.isBlank(password) || StrUtil.isBlank(securePassword)) {
			return false;
		}
		if (securePassword.length() != 65 || !securePassword.contains(".")) {
			return false;
		}
		String[] s = securePassword.split("\\.");
		// 盐值
		String slat = s[0];
		String p = s[1];
		// 使用同样的加密算法和随机盐值生成最终加密的密码
		return p.equals(SecureUtil.md5(slat + password));
	}

}
